#include<iostream>
#include<signal.h>
#include<unistd.h>
#include <sys/wait.h>
void handler(int signo)
{
    std::cout<<"子进程退出信号:"<<signo<<" "<<getpid()<<std::endl;
    while(true)
    {
        int rid= ::waitpid(-1,nullptr,WNOHANG); 
        if(rid>0) std::cout<<"子进程回收: "<<rid<<std::endl;
        else if(rid==0)
        {
            std::cout<<"退出的子进程已经全部回收了"<<std::endl;
            break;
        }
        else 
        {
            std::cout<<"wait error"<<std::endl;
            break;
        }
    }
}
int main()
{
    //使用信号回收子进程
    // ::signal(17,handler);
    //  Linux，将SIGCHID的处理动作置为SIG_IGN,这样fork出来的子进程在终止时会自动清理掉
    ::signal(SIGCHLD,SIG_IGN);
    //问题1：1个子进程，10个呢？
    //问题2：10个子进程，6个退出了，4个还在运行
    for(int i=0;i<10;i++)
    {
        int id=::fork();
        if(id==0)
        {
          sleep(5);
          std::cout<<"子进程退出"<<std::endl;
          exit(0);
        }
    }

   while(true)
   {

   }
    return 0;
}